#!/bin/bash

app_help() {
    cat <<EOF
文件上传功能
    命令格式: fw push 文件路径
        注意: 上传成功会出现文件上传码, 没有此上传码是提取不了上传的文件

    上传文件: fw push /tmp/1.jpg

文件下载功能
    命令格式: fw pull 上传码/远程文件名 下载保存路径

    下载刚上传的文件并保存到/tmp目录下: fw pull 3v23T /tmp/1.jpg
                  下载资源服务器的文件: fw pull update_v1 /tmp/update

执行资源服务器脚本
    命令格式: fw run 服务器脚本名

          执行系统初始化脚本: fw run v1
    执行移动安装盘初始化脚本: fw run sd

其它相关命令

     查看远程控制状态: fw status
         启动远程控制: fw
     查看远程控制日志: fw log
         关闭远程控制: fw stop
         重启远程控制: fw restart
     远程重启远程控制: fw rr
         清除运行文件: fw clean
             重启电脑: fw r
                 关机: fw p
                 帮助: fw h
EOF
}

err_exit() {
    echo $1
    exit $2
}

app_stop() {
    local pid=$(cat $PID_FILE 2> /dev/null)
    rm -f $PID_FILE
    test -z "$pid" && pid=$(ps -eo pgid,args | egrep "main.py" | grep -v 'grep' | awk '{print $1}' | sort | uniq)
    test -z "$pid" && return 0
    kill -9 "-$pid"
}

app_start() {
    until ping -c 1 www.baidu.com &> /dev/null ; do
        echo '正在连接网络....' >> $LOG_FILE
        sleep 2
    done
    if test "$UID" -eq 0; then
        su - pi -c "fw start"
        exit 0
    fi
    until ps -aux | grep Xorg | grep -vq 'grep'; do
        echo '正在等待X服务启动...' >> $LOG_FILE
        sleep 2
    done
    export DISPLAY=:0
    # xset dpms force on
    xset s 0
    xset dpms 0 0 0
    xset -dpms
    CENTERENV=${CENTERENV-prod}
    APP_DEBUG=${APP_DEBUG-0} CENTERENV=${CENTERENV} CENTERLOCALIP=${CENTERLOCALIP-172.17.0.1} python3 main.py
    exit 0
}

app_restart() {
    app_stop
    rm $LOG_FILE $PID_FILE -f
    app_start
}

file_push() {
    local filename="$1"
    test -e "$filename" || err_exit "Not File..."
    local result=$(curl -s --upload-file $filename "$FILE_SRV/$FILE_SRV_DEFAULT_NAME" -H 'Max-Days: 20')
    result=${result/\/$FILE_SRV_DEFAULT_NAME}
    echo ${result##*/}
}

file_pull() {
    local filename="$1"
    local dstpath="${2-/tmp/$FILE_SRV_DEFAULT_NAME}"

    test -z "$filename"  && err_exit "Not Down File..."

    curl -s -I $RES_SRV/$filename | grep -q '200 OK'    \
        && curl -s -o $dstpath $RES_SRV/$filename       \
        || curl -s -o $dstpath $FILE_SRV/$filename/$FILE_SRV_DEFAULT_NAME
}

run_srv_script() {
    local name="$1"
    test -z "$name" && err_exit "Not Script File..."
    shift
    curl -fsSL $RES_SRV/update_$name | bash -s $@ &> /tmp/update_${name}_$(date +"%Y%m%d%H%M%S").log
}

run_wifi() {
    local ssid=${1-list}
    local passwd=$2

    case "$ssid" in
        list)
            nmcli c
            ;;
        scan)
            nmcli d wifi | head
            ;;
        up)
            nmcli c up $passwd
            ;;
        down)
            nmcli c down $passwd
            ;;
        *)
            nmcli d wifi connect $ssid password $passwd
            ;;
    esac
}

WORK_DIR=${WORK_DIR-/works}
FILE_SRV="http://jbyzjslmw96j.aoaoco.com:31467"
RES_SRV="http://jbyzjslmw96j.aoaoco.com:18634"
FILE_SRV_DEFAULT_NAME=fwfile
LOG_FILE=/tmp/ws.log
PID_FILE=/tmp/ws.pid

cd $WORK_DIR

cmd="$1"

shift

test -z "$cmd" && app_restart

case "$cmd" in
    start)
        app_start
        ;;
    push)
        file_push "$@"
        ;;
    id)
        echo -n "$(sudo dmidecode -s baseboard-manufacturer)-FLASH|"
        echo -n "$(sudo dmidecode -s baseboard-serial-number)|"
        echo -n "$(sudo dmidecode -s baseboard-product-name)"
        ;;
    pull)
        file_pull "$@"
        ;;
    run)
        run_srv_script "$@"
        ;;
    wifi)
        run_wifi "$@"
        ;;
    r)
        sudo init 6
        ;;
    p)
        sudo init 0
        ;;
    h)
        app_help
        ;;
    clean)
        rm $LOG_FILE $PID_FILE -f
        ;;
    stop)
        app_stop
        ;;
    status)
        ps -eo pgid,comm | egrep "chrom|python" | sort | uniq
        ;;
    log)
        tail -f $LOG_FILE
        ;;
    rom)
        python3 invasion.py flash "$@"
        ;;
    web)
        python3 invasion.py login "$@"
        ;;
    ping)
        python3 invasion.py ping "$@"
        ;;
    first)
        python3 invasion.py first "$@"
        ;;
    rr)
        python3 main.py restart
        ;;
    restart)
        app_restart
        ;;
    *)
        echo 'Not Command...'
esac
